// 游客登录服务
import { login } from '@/api';
import { useAppStore, useUserStore } from '@/stores';
import { getUuid } from '@/utils/utils';

// 游客账号配置
const GUEST_CREDENTIALS = {
  username: 'guest',
  password: 'Jykj@301117',
};

export class GuestService {
  private static instance: GuestService;
  private isGuestLoggedIn = false;

  static getInstance(): GuestService {
    if (!GuestService.instance) {
      GuestService.instance = new GuestService();
    }
    return GuestService.instance;
  }

  // 检查是否为游客登录状态
  isGuest(): boolean {
    return this.isGuestLoggedIn;
  }

  // 游客自动登录
  async autoLoginAsGuest(): Promise<boolean> {
    try {
      const userStore = useUserStore();
      const appStore = useAppStore();

      // 如果已经是游客登录状态，不需要重复登录
      if (this.isGuestLoggedIn) {
        console.log('已经是游客登录状态，跳过重复登录');
        return true;
      }

      // 如果有token但没有用户信息，可能是游客token，创建游客用户信息并标记为游客状态
      if (userStore.token && !userStore.userInfo) {
        console.log('检测到token但无用户信息，创建游客用户信息并标记为游客状态');
        
        // 为游客创建虚拟用户信息
        const guestUserInfo = {
          userId: 0, // 游客用户ID
          username: 'guest',
          nickName: '游客用户',
          avatar: '', // 使用默认头像
          email: '',
          phone: '',
          createTime: new Date().toISOString(),
        };
        
        userStore.setUserInfo(guestUserInfo);
        this.isGuestLoggedIn = true;
        return true;
      }

      // 如果有token且有用户信息，说明是正常用户，不需要游客登录
      if (userStore.token && userStore.userInfo) {
        console.log('检测到正常用户登录状态，跳过游客登录');
        return true;
      }

      console.log('游客登录检查 - token:', !!userStore.token, 'userInfo:', !!userStore.userInfo, 'isGuestLoggedIn:', this.isGuestLoggedIn);
      console.log('开始游客自动登录...');

      const res = await login({
        ...GUEST_CREDENTIALS,
        uuid: getUuid(),
      });

      console.log('游客登录API响应:', res);

      if (res.code !== 0) {
        console.error('游客登录失败:', res.msg);
        return false;
      }

      // 设置token和游客用户信息
      if (res.data.token) {
        console.log('设置游客token:', res.data.token);
        userStore.setToken(res.data.token);
        
        // 为游客创建虚拟用户信息，用于聊天功能
        const guestUserInfo = {
          userId: 0, // 游客用户ID
          username: 'guest',
          nickName: '游客用户',
          avatar: '', // 使用默认头像
          email: '',
          phone: '',
          createTime: new Date().toISOString(),
        };
        
        // 注意：这里我们设置用户信息但标记为游客状态
        userStore.setUserInfo(guestUserInfo);
        this.isGuestLoggedIn = true;

        // 初始化应用数据
        console.log('初始化应用数据...');
        const initSuccess = await appStore.initApp();
        if (!initSuccess) {
          console.error('游客登录后初始化应用数据失败');
          return false;
        }

        console.log('游客自动登录成功');
        return true;
      }

      console.error('游客登录响应中没有token');
      return false;
    }
    catch (error) {
      console.error('游客自动登录错误:', error);
      return false;
    }
  }

  // 清除游客状态
  clearGuestStatus(): void {
    this.isGuestLoggedIn = false;
  }

  // 用户主动登录时清除游客状态
  onUserLogin(): void {
    console.log('用户主动登录，清除游客状态');
    this.isGuestLoggedIn = false;
  }

  // 重置游客登录尝试状态（用于退出登录后重新尝试游客登录）
  resetLoginAttempt(): void {
    this.isGuestLoggedIn = false;
  }
}

// 导出单例实例
export const guestService = GuestService.getInstance();
